﻿// ===============================================================================
//  Copyright © NewSQL.CN. All rights reserved .
//  技术论坛：http://newsql.cn/
//  个人博客：http://www.ymind.net/
//  版权所有：NewSQL中文社区 彦铭工作室
// ===============================================================================

using System;
using System.Runtime.InteropServices;

namespace Newsql.Data.RDBMS
{
	/// <summary>
	/// 表示数据访问层的基类。它允许您访问 <see cref="SimpleSql"/> 的基本功能。
	/// </summary>
	[ComVisible(true)]
	public class SimpleDAL
	{
		/// <summary>
		/// 初始化 <see cref="SimpleDAL"/> 的新实例。
		/// </summary>
		public SimpleDAL() { }

		/// <summary>
		/// 初始化 <see cref="SimpleDAL"/> 的新实例。
		/// </summary>
		/// <param name="configName">指定在 .config 文件中包含数据库连接字符串的配置节点的名称。</param>
		public SimpleDAL(string configName) { this.ConfigName = configName; }

		/// <summary>
		/// 设置或获取在 .config 文件中包含数据库连接字符串的配置节点的名称。
		/// </summary>
		protected string ConfigName { get; set; }

		/// <summary>
		/// 通过指定存储过程名称获取查询构造器。
		/// </summary>
		/// <param name="procName">指定要查询的存储过程名称。</param>
		/// <returns>返回 <see cref="QueryBuilder{T}"/> 的实例。</returns>
		public QueryBuilder<StoredProcedure> StoredProcedure(string procName) { return !String.IsNullOrEmpty(this.ConfigName) ? SimpleSql.StoredProcedure(procName, this.ConfigName) : SimpleSql.StoredProcedure(procName); }

		/// <summary>
		/// 通过指定 Sql 查询语句获取查询构造器。
		/// </summary>
		/// <param name="sqlStatement">指定包含 Sql 查询语句的字符串。</param>
		/// <returns>返回 <see cref="QueryBuilder{T}"/> 的实例。</returns>
		public QueryBuilder<Query> Query(string sqlStatement) { return !String.IsNullOrEmpty(this.ConfigName) ? SimpleSql.Query(sqlStatement, this.ConfigName) : SimpleSql.Query(sqlStatement); }

		/// <summary>
		/// 为多个查询创建简单的事务。
		/// </summary>
		/// <returns>返回 <see cref="SimpleTransaction"/> 的新实例。</returns>
		public SimpleTransaction CreateTransaction() { return !String.IsNullOrEmpty(this.ConfigName) ? SimpleSql.CreateTransaction(this.ConfigName) : SimpleSql.CreateTransaction(); }
	}
}
